package com.learning.dubbo.base.config.code.consumer;

import com.learning.dubbo.base.config.code.api.GreetingsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * ClassName: Consumer
 * Description: 消费客户端
 * Date: 2020/6/15 13:43 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
@Slf4j
public class Consumer {
    public static void main(String[] args) throws Exception {
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("dubbo-springboot-code-consumer");

        // 连接注册中心配置
        RegistryConfig registry = new RegistryConfig("224.5.6.7:1234", "multicast");

        // 注意：ReferenceConfig为重对象，内部封装了与注册中心的连接，以及与服务提供方的连接
        // 引用远程服务
        // 此实例很重，封装了与注册中心的连接以及与提供者的连接，请自行缓存，否则可能造成内存和连接泄漏
        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
        reference.setApplication(application);
        // 多个注册中心可以用setRegistries()
        reference.setRegistry(registry);
        reference.setInterface(GreetingsService.class);
        reference.setVersion("1.0.0");

        // 和本地bean一样使用 greetingsService
        // 注意：此代理对象内部封装了所有通讯细节，对象较重，请缓存复用
        GreetingsService greetingsService = reference.get();
        String hello = greetingsService.sayHi("API World");
        System.out.println(hello);
    }
}
